簡介
在計算機科學中, 抽象語法樹(abstract syn tax tree或者縮寫為 AST),或者 語法樹( syntax tree),是原始碼的抽象語法結構的樹狀表現形式,這裡特指程式語言的原始碼。樹上的每個節點都表示原始碼中的一種結構。之所以說語法是“抽象”的,是因為這裡的語法並不會表示出真實語法中出現的每個細節。比如,嵌套括弧被隱含在樹的結構中,並沒有以節點的形式呈現;而類似於if-condition-then這樣的條件跳轉語句,可以使用帶有兩個分支的節點來表示。
概念
抽象語法樹(Abstract Syntax Tree ,AST)作為程式的一種中間表示形式,在程式分析等諸多領域有廣泛的套用.利用抽象語法樹可以方便地實現多種源程式處理工具,比如源程式瀏覽器、智慧型編輯器、語言翻譯器等.
結構
抽象語法樹的結構不依賴於源語言的文法,也就是語法分析階段所採用的上下文無關文法。因為在Parser過程中,經常會對文法進行等價的轉換(消除左遞歸、回溯、二義性等),這樣會給文法引入一些多餘的成分,對後續階段造成不利影響,甚至會使各階段變得混亂。因此,很多編譯器(包括GJC)經常要獨立地構造語法分析樹,為前、後端建立一個清晰的接口。
下圖是hello.java中的“hello world“程式的AST示例: